אני לא בטוח בעצמי ורציתי לשאול שאלה, ע"פ מה שקראתי הבנתי שבשום פנים ואופן לא לסמוך על המשתמש ולקלוט ממנו מידע שאיתו אני ישתמש במערכת. לפי מה שאני הבנתי זה דבר כזה:
דוגמא של מערכת משתמשים: אני מציג למשתמש את הפרטים שלו ע"י שליפה מהמסד, השליפה שולפת את השורה כאשר ה$_GET['id'] שווה לid של המשתמש במסד. ה$_GET זה משהו שאני קולט מהמשתמש ולפי מה שהבנתי אין לסמוך על זה ולהשתמש בזה. אז פשוט, איך אוכל להציג למשתמש את פרטיו מבלי לאפשר חורי פריצה במערכת או פגיעה כזו או אחרת במערכת.
id הוא מספרי, אני תיארתי לעצמי להעביר בדיקה על הget ולסנן אותו מכל התווים שהם אינם מספרים כך שאני נשאר עם הid. אני לא יודע מה הכי מועיל ומה הכי נכון לעשות כי באמת לא הבנתי כ"כ מה הדרך הכי טובה ובטוחה להציג למשתמש את פרטיו מבלי ליצור חור דרך ה get.
אשמח להסבר מורחב בנושא הזה, כי שאלתי כמה אנשים בפורומים שונים וההסברים היו לא ברורים או פשוט סתם דברים לא קשורים. תודה :).
7 תשובות
שלום לך,
כיום יש כמה פונקציות טובות שאתם אפשר להשתמש כדי למנוע חורי אבטחה באתר, בעט שליפה מ Get.
למשל, במידה ויש לך שליפה של טקסט, אתה יכול להשתמש ב "mysql_real_escape_string",
אבל במקרה שלך, זה שליפה של מספרים בלבד, ולכן אני ממליץ להשתמש ב intval כמו שאמר שלמה בתגובה לפני.
בהצלחה (:
בנוסף אני מאוד ממליץ לקרוא את המדריך על sql injection באתר כדי להבין מה בכלל גורם לקלט להיו פאום לא מאובטח
ואיך זה יכול לפגוע בך.
הבנתי פחות או יותר, אני משתמש בintval, ראיתי שיש עוד כמה פונקציות שעובדות עם מספרים, intval הכי טובה מבן כל השאר שקיימים?. ואם לדוגמא המשתמש כותב במקום המספר אותיות או סימנים - הintval לא מסנן אותם-במה משתמשים במצב כזה?
בנוסף, בקישורים אם הגולש משנה את הקישור ומשחק איתו וכותב תווים ודברים כאלה, זה מעביר אותו לדף שגיאה 404.
הכל עובד כמו שצריך פרט לסימן אחוז וכוכבית (*,%). רק שיש % \ * בכתובת, ולא משנה איפה הוא נמצא זה מעביר לדף שגיאה 400. איך אוכל לשנות את זה לדף שגיאה 404 ?